-- LA FUNCION sumar_dias_habiles(fecha, dias), cuando fecha era NULL entraba en un loop infinito.


CREATE OR REPLACE FUNCTION public.sumar_dias_habiles(
    timestamp with time zone,
    integer)
  RETURNS date AS
$BODY$
/* Suma dias habiles a una fecha. Devuelve una fecha. Si se envia dias en negativo los resta. Si se envia dias en cero va al proximo dia habil. */
DECLARE
pFecha			ALIAS FOR $1;
pDiasHabiles		ALIAS FOR $2;
wDias 			integer;
wDiasHabiles 	integer;
wHoy			date;
BEGIN
IF pFecha IS NULL THEN 
   RETURN pFecha;
END IF;   
     wDias := 0;
     wDiasHabiles := 0;
    LOOP
         wHoy := cast(pFecha as date) + wDias;
         IF EXTRACT(DOW FROM wHoy) IN (1, 2, 3, 4, 5) THEN     -- El cero es el domingo y el seis el el sabado.
             wDiasHabiles := wDiasHabiles + case when pDiasHabiles < 0 then -1 else 1 end;
         END IF;
         wDias := wDias + case when pDiasHabiles < 0 then -1 else 1 end;
         IF abs(wDiasHabiles) >  abs(pDiasHabiles) THEN
		EXIT;
	END IF;
   END LOOP;
   RETURN wHoy;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.sumar_dias_habiles(timestamp with time zone, integer)
  OWNER TO abacouser;


-- =====================================
SELECT aaversion('396.02');
-- =====================================

